package com.schedule;

import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;

import com.dao.BaseModelDAO;
import com.model.Parametro;
import com.model.Stock;
import com.util.DateUtil;
import com.util.MailServiceImpl;

public class AlarmaStockMinimo {

	private final String mailStockMinimoPrefijo = "mail.stockMinimo";

	private final String mailStockMinimoCuerpo = "cuerpo.stockMinimo";

	private Logger log = Logger.getLogger(AlarmaStockMinimo.class);

	private BaseModelDAO<Stock> stockDao;

	private BaseModelDAO<Parametro> parametroDao;

	private MailServiceImpl mailService;

	public BaseModelDAO<Stock> getStockDao() {
		return stockDao;
	}

	public void setStockDao(BaseModelDAO<Stock> stockDao) {
		this.stockDao = stockDao;
	}

	public BaseModelDAO<Parametro> getParametroDao() {
		return parametroDao;
	}

	public void setParametroDao(BaseModelDAO<Parametro> parametroDao) {
		this.parametroDao = parametroDao;
	}

	public MailServiceImpl getMailService() {
		return mailService;
	}

	public void setMailService(MailServiceImpl mailService) {
		this.mailService = mailService;
	}

	public void enviarMailAlertaStockMinimo() {

		StringBuilder sb = new StringBuilder();

		try {
			// traigo los productos que tienen stock bajo (igual o menos que el
			// stock minimo)
			List<Stock> listaStock = stockDao.getList("Dummy");

			// si hay algún producto con stock minimo
			if (listaStock != null && listaStock.size() > 0) {

				// traigo la lista de interesados
				List<Parametro> listaParametro = parametroDao
						.getList(mailStockMinimoPrefijo);

				Parametro cuerpo = parametroDao.get(mailStockMinimoCuerpo);

				if (cuerpo == null) {
					log.error("Falta configurar el parámetro "
							+ mailStockMinimoCuerpo);
				} else if (listaParametro.size() == 0) {
					log.error("Falta configurar el parámetro "
							+ mailStockMinimoPrefijo
							+ "....Para que haya un destinatario del mail de alerta");
				} else {

					sb.append(cuerpo.getValor() + "\n\n\n");
					
					for (Stock stock : listaStock) {

						sb.append("El producto "
								+ stock.getProducto().getDetalle() + " Tiene "
								+ stock.getCantidad()
								+ " en stock y el mínimo es "
								+ stock.getProducto().getStockMinimo() + "\n");
					}

					for (Parametro mailInteresado : listaParametro) {
						mailService.send(
								mailInteresado.getValor(),
								"Productos con stock bajo - "
										+ DateUtil.dateToString(new Date(),
												"dd/MM/yyyy"), sb.toString());
					}

				}

			}

		} catch (Throwable t) {
			log.error("Error al enviar el mail de alarma de stock mínimo ", t);
		}

	}
}
